package com.ruoyi.user.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.pojo.request.PageParam;
import com.ruoyi.common.core.pojo.result.Pages;
import com.ruoyi.user.model.pojo.entity.Attention;
import com.ruoyi.user.model.pojo.request.app.AppUserSetIsLookRequest;
import com.ruoyi.user.model.pojo.request.app.AppUserSetNoteNameRequest;
import com.ruoyi.user.model.pojo.result.NotReadInfo;
import com.ruoyi.user.model.pojo.result.UserFansInfo;

import java.util.Set;

/**
 * <p>
 * 关注表 服务类
 * </p>
 *
 * @author ${author}
 * @since 2023-05-21
 */
public interface IAttentionService extends IService<Attention> {

    /**
     * 关注-取消关注
     *
     * @param userId    我的id
     * @param aimUserId 被关注人的id
     */
    Integer attention(Long userId, Long aimUserId);


    /**
     * 关注-取消关注    增加亲密度
     *
     * @param userId    我的id
     * @param aimUserId 被关注人的id
     */
    Integer attention(Long userId, Long aimUserId, Integer intimacyNum);

    /**
     * 查看是否关注对方
     */
    Integer isAttention(Long userId, Long aimUserId);

    /**
     * 获取某个用户被关注数
     *
     * @param userId 查询用户id
     */
    Long beAttentionCount(Long userId);

    /**
     * 获取某个用户关注的用户
     */
    Set<Long> attentionUserIds(Long userId);

    /**
     * 获取某个用户关注的用户数量
     */
    Long attentionUserCount(Long userId);

    /**
     * 查询某个用户新增未读粉丝数量
     *
     * @param userId 用户id
     */
    Long notReadAttention(Long userId);

    /**
     * 查询某个用户新增未读粉丝数量
     *
     * @param userId 用户id
     * @param isRead 是否已读 null不处理
     */
    Long notReadAttention(Long userId, Integer isRead);

    /**
     * 获取最后一条关注我的数据
     *
     * @param userId 用户id
     */
    Attention lastAttention(Long userId);

    /**
     * 一键已读某个用户被关注消息
     *
     * @param userId 用户id
     */
    void read(Long userId);

    /**
     * 新增粉丝
     *
     * @param pageSearchParam 参数
     * @param userId          查询用户id
     */
    Pages<UserFansInfo> fansList(PageParam pageSearchParam, Long userId);

    /**
     * 查询用户未读数量
     *
     * @param userId 用户id
     */
    NotReadInfo notMessage(Long userId);


    /**
     * 获取某个用户关注的好友
     *
     * @param pageSearchParam
     * @param userId
     * @return
     */
    Pages<UserFansInfo> attentionList(PageParam pageSearchParam, Long userId);

    /**
     * 获取某个用户相互关注的好友
     *
     * @param pageSearchParam
     * @param userId
     * @return
     */
    Pages<UserFansInfo> mutualList(PageParam pageSearchParam, Long userId);

    /**
     * 设置好友备注
     *
     * @param
     * @param userId
     * @return
     */
    boolean setNote(AppUserSetNoteNameRequest request, Long userId);

    /**
     * 不让Ta看
     *
     * @param request
     * @param userId
     * @return
     */
    Integer isLook(AppUserSetIsLookRequest request, Long userId);

    /**
     * 拉黑
     *
     * @param request
     * @param userId
     * @return
     */
    Integer isBlock(AppUserSetIsLookRequest request, Long userId);

    /**
     * 获取关注信息
     *
     * @param userId
     * @param aimUserId
     * @return
     */
    Attention findById(Long userId, Long aimUserId);

    /**
     * 移除粉丝
     *
     * @param aimUserId
     * @param userId
     * @return
     */
    boolean undockFensi(Long aimUserId, Long userId);


    /**
     * @param userId
     * @param aimUserId
     * @return
     */
    Integer isMyFens(Long userId, Long aimUserId);

    /**
     * 获取对方给我设置的备注
     *
     * @param userId
     * @param aimUserId
     * @return
     */
    String aimNoteName(Long userId, Long aimUserId);
}
